package com.study.exception;


import com.study.pojo.Result;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.stream.Collectors;

@RestControllerAdvice("com.study.controller") // 处理com.study.controller包下的所有Controller
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class) // 处理所有异常
    @ResponseBody // 返回json格式数据；
    public Result<String> error(Exception e) {
        e.printStackTrace(); // 在控制台输出异常信息
        Result<String> result = new Result<>();
        return Result.error();
    }

    @ExceptionHandler(CustomException.class) // 处理自定义异常
    @ResponseBody // 返回json格式数据
    public Result error(CustomException e) {
        e.printStackTrace(); // 在控制台输出异常信息
        return Result.error(e.getCode(), e.getMessage(), null);
    }

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<String> handleValidationExceptions(MethodArgumentNotValidException ex) {
        String errorMessage = ex.getBindingResult().getFieldErrors().stream()
                .map(error -> error.getField() + ": " + error.getDefaultMessage())
                .collect(Collectors.joining("; "));
        return ResponseEntity.badRequest().body(errorMessage);
    }
}
